User blog:MasterKnight/Thracia 776 hacking notes
SNES ASM shortcuts Branch Negative/Overflow/Carry/Zero status: MMS10000; M = Mark, S = Status Branch Unconditional: 10000000 OR/AND/XOR(/ADC) A, M: 0AAX XXX1 Add/Subtract Carry A, M: N11X XXX1 Store/Load A, M: 10LX XXX1 -89 is BIT A, Immediate Compare A, M: 110X XXX1 - XXXX: 0: DP Indexed Indirect,X (+1 byte) 1: Stack Relative (+1 byte) 2: Direct Page (+1 byte) 3: DP Indirect Long (+1 byte) 4: Immediate (+1~2 bytes) 6: Absolute (+2 bytes): 7: Absolute Long (+3 bytes) 8: DP Indirect Indexed,Y (+1 byte) 9.5: DP Indirect (+1 byte) 9: SR Indirect Indexed,Y (+1 byte) 10: DP Indexed,X (+1 byte) 11: DP Indirect Long Indexed,Y (+1 byte) 12: Absolute Indexed,Y (+2 bytes) 14: Absolute Indexed,X (+2 bytes) 15: Absolute Long Indexed,X (3 bytes) Weight's influence on Fight Speed Process 0001D38B: E220 : Set Processor Status Bits $20 640B : Store 0, ($0B) AD500F : Load A, ($0F50) 8908 : BIT A, $08 (I guarantee this is a tome check) D005 : Branch NZ +5 (next 2 lines) BD1100 : Load A, (X+$0011) (A = Build) 850B : Store A, ($0B) (establishes Absolute Value) AD3E0F : Load A, ($0F3E) (A = Weapon Weight) 38 : Set Carry E50B : Subtract Carry A, ($0B) 1002 : Branch NN +2 (next line) A900 : A = 0 850B : Store A, ($0B) (stores Weight surplus) BD0E00 : Load A, (X+$000E) 38 : Set Carry E50B : Subtract Carry A, ($0B) 1002 : Branch NN +2 A900 : A = 0 9D4600 : Store A, (X+$0046) (Fight Speed stored) C230 : Reset Processor Status Bits $30 60 : Return from Subroutine Doubling hack version Process 0001D38B: E220 : Set Processor Status Bits $20 AD500F : A = ($0F50) 8908 : BIT A, $08 D005 : Branch NZ +5 (next 2 lines) 20DAFC : JSR $FCDA 8003 : Branch Unconditional +3 (next line) 20E5FC : JSR $FCE5; ultimate result is ($0B) holds Weight Surplus BD0E00 : A = unit's Speed stat 38 : Set Carry E50B : A = Speed - Weight Surplus 1002 : Branch NN +2 (next line) A900 : A = 0 9D4600 : A = unit's Fight Speed C230 : Reset Processor Status Bits $30 60 : Return From Subroutine FFFFFFFFFFFFFFFFFFFFFF : surplus bytes converted to FFs - 0001FCDA: BD1100 : A = Build stat 0A : ASL A 0A 0A : Net result A = Build stat x 8 7D0B00 : Add Strength stat 8008 : Branch Unconditional +8 (next 4 lines) with net result A = Build x 8 + Strength BD1100 0A 7D0B00 0A : Net result A = Build x 4 + Strength x 2 850B : Store A, ($0B) AD3E0F : A = Weapon Weight 0A 0A 1A : Increment A 0A 1A : Net result A = Weapon Weight x 8 + 3 38 : Set Carry E50B : Subtract ($0B) B002 : Branch NC +2 (next line) A900 : A = 0 (result is minimization of 0) 18 : Reset Carry 4A : LSR A 18 4A 18 : Net result A = max(0,(Weapon Weight x 2 - Build (x 2) - int((Strength (x 2)) / 4))) 850B : Store Net result,($0B) 60 : Return From Subroutine Fight Speed Process 0001D692: E220 : Set Processor Status Bits $20 AD35A5 : A = attacker's Fight Speed 38 : Set Carry EDA6A5 : Subtract defender's Fight Speed 1003 : Branch Positive +3 49FF : XOR diference 1A : Increment A C904 : Compare Stack Relative 4 (doubling threshold) 9026 : Branch Carry Clear +38 AD35A5 : A = attacker's Fight Speed CDA6A5 : Compare to defender's Fight Speed 900E : Branch Carry Clear +14 Attacker wins: A2EFA4 : X = A4EF A060A5 : Y = A560 ADE0A4 : A = (A4E0) 8DE2A4 : (A4E2) = (A4E0) 8014 : Branch Unconditional +20 Attacker loses: A260A5 : X = A560 A0EFA4 : Y = A4EF ADE0A4 : A = (A4E0) 0902 : OR A, 2 8DE2A4 : (A4E2) = OR (A4E0), 2 8004 : Branch Unconditional +4 Doubling doesn't happen: C230 : Reset Processor Status Bits $30 18 : Clear Carry 60 : Return From Subroutine Somebody doubles: C230 : Reset Processor Status Bits $30 A90001 : Load A, 256 8DE4A4 : Store 256, ($A4E4) 38 : Set Carry 60 : Return From Subroutine Doubling Hack changes 00016D94: 20D3FC : JSR $FCD3 - 0001D6A0: C906 : Compare Stack Relative 6 - 0001FCD3: AD35A5 : A = Attacker's Fight Speed 6904 : Add 4 to A 60 : Return From Subroutine FF : Surplus Byte in case Carry Flag bug happens Net effect: doubling thresholds are +2 for attacker, +10 for defender Stats halved by Capture/Rescue Process 0001E448: 08 : Push Processor Status Register E220 : Set Processor Status Bits $20 BD0B00 : Load A, (X+$000B) (Strongth stat) 4A : LSR A (halves Strongth stat) 9D0B00 : Store A, (X+$0011) (Strongth has been halved) BD0C004A9D0C00 (Magic Power stat version) BD0D004A9D0D00 (Skillz stat version) BD0E004A9D0E00 (Speeeeeeeeed stat version) BD0F004A9D0F00 (Physical DEF stat version) 28 : Pull Processor Status Register 6B : Return From Subroutine Long Category:Blog posts